import request from '@/utils/request'
import { useUserStore } from '@/store/userStore'

/**
 * 用户登录
 * @param {Object} data 登录参数
 * @param {string} data.phone 手机号或邮箱
 * @param {string} data.password 密码（密码登录时必填）
 * @param {string} data.code 验证码（验证码登录时必填）
 * @param {string} data.login_type 登录类型：password-密码登录，code-验证码登录
 * @returns {Promise}
 */
export function login(data) {
  return request({
    url: '/v6/login/login',
    method: 'post',
    data
  })
}

/**
 * 用户注册
 * @param {Object} data 注册参数
 * @param {string} data.account 手机号或邮箱
 * @param {string} data.code 验证码
 * @param {string} data.password 密码
 * @returns {Promise}
 */
export function register(data) {
  return request({
    url: '/v6/login/register',
    method: 'post',
    data
  })
}

/**
 * 发送验证码
 * @param {Object} data 发送参数
 * @param {string} data.phone 手机号或邮箱
 * @returns {Promise}
 */
export function sendSmsCode(data) {
  return request({
    url: '/v6/login/sendSmsCode',
    method: 'post',
    data
  })
}

/**
 * 获取微信登录授权URL
 * @returns {Promise} 包含授权URL的Promise
 */
/**
 * 获取微信登录URL
 * @param {boolean} isWechat 是否在微信浏览器中
 * @param {boolean} isMobile 是否在移动设备上
 * @returns {Promise} 包含微信登录URL的Promise
 */
export function getWechatLoginUrl(isWechat, isMobile) {
  return request({
    url: '/v6/login/wechatLogin',
    method: 'get',
    params: { isWechat, isMobile }
  })
}

/**
 * 检查微信登录状态
 * @param {string} state 微信登录授权状态码
 * @returns {Promise} 包含登录状态的Promise
 */
export function checkWechatLoginStatus(state) {
  return request({
    url: '/v6/login/checkWechatLogin',
    method: 'get',
    params: { state }
  })
}

/**
 * 修改密码
 * @param {Object} data 修改密码参数
 * @param {string} data.old_password 旧密码
 * @param {string} data.new_password 新密码
 * @returns {Promise}
 */
export function changePassword(data) {
  // 获取token
  const token = getToken();
  
  return request({
    url: '/v6/login/changePassword',
    method: 'post',
    data,
    headers: {
      'Authorization': `Bearer ${token}` // 添加JWT令牌到请求头
    }
  })
}

/**
 * 用户退出登录
 * @returns {Promise}
 */
export function logout() {
  return request({
    url: '/v6/login/logout',
    method: 'post'
  })
}

// 用于存储token的键名
const TOKEN_KEY = 'user-token';

/**
 * 保存用户信息和token
 * @param {Object} userInfo 用户信息
 * @param {string} token JWT令牌
 */
export function saveUserInfo(userInfo, token) {
  const userStore = useUserStore();
  
  // 更新store中的用户信息
  userStore.login(userInfo);
  
  // 保存token到localStorage（token仍然需要存储在localStorage中，因为它需要在请求拦截器中使用）
  localStorage.setItem(TOKEN_KEY, token);
}

/**
 * 清除用户信息和token
 */
export function clearUserInfo() {
  const userStore = useUserStore();
  
  // 清除store中的用户信息
  userStore.logout();
  
  // 清除token
  localStorage.removeItem(TOKEN_KEY);
}

/**
 * 获取用户信息
 * @returns {Object|null} 用户信息
 */
export function getUserInfo() {
  const userStore = useUserStore();
  
  // 如果用户已登录，返回store中的用户信息
  if (userStore.getLoginStatus) {
    return {
      username: userStore.getUserName,
      isPremium: userStore.getPremiumStatus,
      credits: userStore.getCredits
    };
  }
  
  return null;
}

/**
 * 获取JWT令牌
 * @returns {string|null} JWT令牌
 */
export function getToken() {
  return localStorage.getItem(TOKEN_KEY);
}

